<?php


namespace Site\ProjetBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Site\ProjetBundle\Entity\Projet;
use Site\GeneralBundle\Entity\Ue;
use Site\GeneralBundle\Entity\Souhait;
use Site\UtilisateurBundle\Entity\Utilisateur;

class DefaultController extends Controller
{
    public function indexAction($name)
    {
        return $this->render('SiteProjetBundle:Default:index.html.twig', array('name' => $name));
    }


    public function ajouterProjetAction()
    {
      $em= $this->getDoctrine()->getManager();

      $projet = new Projet();

      // Permet de générer un formulaire avec les nb etudiants pré-remplis


      $projet->setNbMinEtud(2);
      $projet->setNbMaxEtud(8);
      $projet->setNbInscritsEtud(0);

      // Charger les UEs

      $listeUe = $em->getRepository('SiteGeneralBundle:Ue')->findAll();
      $arrayUE = array();
      foreach($listeUe as $ue)
	{
	  $arrayUE[$ue->getId()] = $ue->getCode();
    }


      $formBuilder = $this->createFormBuilder($projet);
      $formBuilder
	->add('titre', 'text', array('attr'=> array('class' =>'form-control')))
	->add('description', 'textarea', array('attr'=> array('class' =>'form-control')))
	->add('nbMinEtud', 'integer', array('attr'=> array('class' =>'form-control')))
	->add('nbMaxEtud', 'integer', array('attr'=> array('class' =>'form-control')))
	->add('lien', 'url', array('required'=>false, 'attr' =>array('class' =>'form-control')))
	->add('fichier', 'file', array('required'=>false));

      $form = $formBuilder->getForm();

      $request = $this->get('request');
      if($request->getMethod() == 'POST')
	{
	  $form->bind($request);
	  // On récupère l'ue en fonction de l'id recue du formulaire
	  $projet->setUe($em->getRepository('SiteGeneralBundle:Ue')->findOneById($request->get('ue')));
	  // regarder entité @ method setEnseignant
	  if($form->isValid())
	    {
	      if ($form['fichier']->getData())
                {
		  $form['fichier']->getData()->move("fichiers/", $form['fichier']->getData()->getClientOriginalName());
		  $projet->setFichier("fichiers/". $form['fichier']->getData()->getClientOriginalName());
                }
	      $projet->setEnseignant($this->getUser());
	      $em->persist($projet);
	      $em->flush();
	      // Une fois le projet ajouté, redirection vers la page d'accueil où le projet est sensé s'afficher car enregistré en BDD
	      return $this->redirect($this->generateUrl('site_homepage', array('page'=>'', )));
	    }
	}
      return $this->render('SiteProjetBundle:Default:ajouterProjet.html.twig', array('form'=> $form->createView(), 'listeUe' =>$listeUe));

    }



	public function supprimerProjetAction($id)
	{
		$form = $this->createFormBuilder()->getForm();

		$em = $this->getDoctrine()->getManager();
		$projet = $em->getRepository('SiteProjetBundle:Projet')->find($id);


		$request = $this->getRequest();
		if ($request->getMethod() == 'POST') {
        $form->bind($request);

        if ($form->isValid()) { // Ici, isValid ne vérifie donc que le CSRF
				    // On supprime l'article
				    $em = $this->getDoctrine()->getManager();
		        $projet = $em->getRepository('SiteProjetBundle:Projet')
				                 ->find($id);
				    $em->remove($projet);
				    $em->flush();

				    // Message flash
				    //$this->get('session')->getFlashBag()->add('info', 'Projet bien supprimé');
				    $flash = "Le projet a bien été supprimé";
				    $afficher = true;
				    $alerte = "success";

				    // Redirection vers l'accueil
				    //traitement obligatoire pour éviter des erreurs, à voir
				    $orm = $this->getDoctrine()->getManager(); //Objet "EntityManager"
				    $repositoryProjet = $orm->getRepository('SiteProjetBundle:Projet'); //Récupère le modèle "projet"
				    $listeProjets = $repositoryProjet->findAll(); //Requête ORM : Récupérer la liste des projets (sous un objet ArrayCollection)

			      //return $this->redirect($this->generateUrl('site_homepage', array('page'=>'', 'flash'=>$flash, 'alerte' => $alerte, 'afficher' => $afficher)));
			      return $this->render('SiteGeneralBundle:Default:index.html.twig', array('listeProjets'=>$listeProjets, 'flash'=>$flash, 'alerte' => $alerte, 'afficher' => $afficher));
        }
    }

		// Si la requête est en GET, on affiche une page de confirmation avant de supprimer
    return $this->render('SiteProjetBundle:Default:supprimerProjet.html.twig', array(
    'projet' => $projet,
    'form'   => $form->createView()
    ));

  }


	public function modifierProjetAction($id)
	{
		$form = $this->createFormBuilder()->getForm();

		$em = $this->getDoctrine()->getManager();
		$projet = $em->getRepository('SiteProjetBundle:Projet')->find($id);

		$formBuilder = $this->createFormBuilder($projet);
		$formBuilder
		->add('titre', 'text', array('attr'=> array('class' =>'form-control')))
		->add('description', 'textarea', array('attr'=> array('class' =>'form-control')))
		->add('nbMinEtud', 'integer', array('attr'=> array('class' =>'form-control')))
		->add('nbMaxEtud', 'integer', array('attr'=> array('class' =>'form-control')))
		->add('lien', 'url', array('required'=>false, 'attr' =>array('class' =>'form-control')))
		->add('fichier', 'file', array('required'=>false));

		$form = $formBuilder->getForm();
		// Charger les UEs

		$listeUe = $em->getRepository('SiteGeneralBundle:Ue')->findAll();
		$arrayUE = array();
		foreach($listeUe as $ue)
		{
			$arrayUE[$ue->getId()] = $ue->getCode();
		}

		$request = $this->getRequest();
		if ($request->getMethod() == 'POST') {
			$form->bind($request);
			// On récupère l'ue en fonction de l'id recue du formulaire
			$projet->setUe($em->getRepository('SiteGeneralBundle:Ue')->findOneById($request->get('ue')));
			
			if ($form->isValid()) {
			  
			  
			  if ($form['fichier']->getData())
			    {
			      $form['fichier']->getData()->move("fichiers/", $form['fichier']->getData()->getClientOriginalName());
			      $projet->setFichier("fichiers/". $form['fichier']->getData()->getClientOriginalName());
			    }
			  
			  
			  // On enregistre le projet
			  $em->persist($projet);
			  $em->flush();
			  
			  $flash = "Modification réussie.";
			  $alerte = "Modification réussie.";

			 $orm = $this->getDoctrine()->getManager(); //Objet "EntityManager"
				    $repositoryProjet = $orm->getRepository('SiteProjetBundle:Projet'); //Récupère le modèle "projet"
				    $listeProjets = $repositoryProjet->findAll(); //Requête ORM : Récupérer la liste des projets (sous un objet ArrayCollection)
			  //return $this->render('SiteProjetBundle:Default:modifierProjet.html.twig', array('form' => $form->createView(), 'typeFlash' => 'success', 'afficherFlash' => 1, 'flash' => $flash, 'projet' => $projet, 'listeUe' => $listeUe));
			  //return $this->redirect($this->generateUrl('site_homepage', array('page'=>'', )));
			  return $this->render('SiteGeneralBundle:Default:index.html.twig', array('listeProjets'=>$listeProjets, 'flash'=>$flash, 'alerte' => "success", 'afficher' => true));
			  }

		}
		
		return $this->render('SiteProjetBundle:Default:modifierProjet.html.twig', array(
												'form' => $form->createView(),
												'projet' => $projet,
		'listeUe' =>$listeUe
		));

	}


	 public function modifSouhaitAction()
	 {
	 	$request = $this->getRequest();
		//affichage des alertes
		$flash = "";
		$alerte = "";
		$afficher = false;

		//nombre de souhait possible
		$nbSouhait=5;

		//récupération de l'utilisateur
        $utilisateur = $this->getUser();

        if ($utilisateur->getType() != 'e')
            throw new \Exception("Vous n'êtes pas étudiant.");

		$ue=$utilisateur->getEtudiant()->getUe();


		//Récupération de la liste des projets
        $orm = $this->getDoctrine()->getManager();

		$repositorySouhait = $orm->getRepository('SiteGeneralBundle:Souhait'); //Récupère le modèle "souhait"
		$repositoryProjet = $orm->getRepository('SiteProjetBundle:Projet'); //Récupère le modèle "projet"

		//On regarde si l'étudiant a déjà fait des souhaits
		$listeSouhait=$repositorySouhait->findBy(array('etudiant'=>$utilisateur->getEtudiant()));

		$listeProjets = $repositoryProjet->findBy(array('ue'=>$ue)); //Requête ORM : Récupérer la liste des projets (Selon l'ue de l'étudiant)
		//suppression des projets vide
		foreach($listeProjets as $key =>$projet)
		{
			if($projet->getNbMaxEtud()-$projet->getNbInscritsEtud()==0)
			{
					unset($listeProjets[$key]);
			}
		}

		$nbSouhait=min($nbSouhait,count($listeProjets));
		//si l'étudiant a validé ses voeux
		if( $request->getMethod() == 'POST' )
		{
			$continuer=true;
			$afficher=true;
			//vérification du formulaire
			for($i=1;$i<=$nbSouhait;$i++)
			{
				for($j=$i+1;$j<=$nbSouhait;$j++)
				{
					if($request->request->get('choix'.$i)==$request->request->get('choix'.$j))
					{
						$flash="Vous avez des souhaits identiques, recommencez ! ";
						$alerte="danger";
						$continuer=false;
					}
				}
			}
			//enregistrement des voeux
			if($continuer)
			{
				if($listeSouhait)
				{
					$i=0;
					foreach($listeSouhait as $souhait)
					{
							$i++;
							$souhait->setOrdre($i);
							$souhait->setProjet($repositoryProjet->findOneById(array('id'=>$request->request->get('choix'.$i))));
							$orm->persist($souhait);
							$orm->flush();
					}
				}
				else
				{
					for($i=1;$i<=$nbSouhait;$i++)
					{
						$souhait=new Souhait();
						$souhait->setOrdre($i);
						$souhait->setEtudiant($utilisateur->getEtudiant());
						$souhait->setProjet($repositoryProjet->findOneById(array('id'=>$request->request->get('choix'.$i))));
						$orm->persist($souhait);
						$orm->flush();
					}
				}
					$flash="Vos souhait sont enregistrés ! ";
					$alerte="success";
			}
		}
		$listeSouhait=$repositorySouhait->findBy(array('etudiant'=>$utilisateur->getEtudiant()));
		$urlFormulaire=$request->server->get('REQUEST_URI');
	    return $this->render('SiteProjetBundle:Default:modifierSouhait.html.twig',array('urlFormulaire'=>$urlFormulaire,
																					'flash' => $flash,
																					'alerte' => $alerte,
																					'afficher' => $afficher,
																					'listeProjets' => $listeProjets,
																					'nbSouhait' => $nbSouhait,
																					'listeSouhait' => $listeSouhait
																				));

	 }

}


